/*
 * tsk_lcd.h
 *  Header for Melt MT-20S4 LCD routine
 *  Created on: 21.03.2011
 *      Author: Vladimir Meshkov <glavmonter@gmail.com>
 */

#ifndef TSK_LCD_H_
#define TSK_LCD_H_

#define LCD_MAXLEN	20


typedef enum
{
	AL_Left,
	AL_Center,
	AL_Right
} LCD_Align;

typedef enum
{
	Line_1 = 0x00,
	Line_2 = 0x40,
	Line_3 = 0x14,
	Line_4 = 0x54
} LCD_Line;

typedef enum
{
	DT_Text,
	DT_CMD
} LCD_DataType;

#define LCD_CUR_NONE 	0
#define LCD_CUR_ON	1
#define LCD_CUR_BLINK	2

typedef enum
{
	CMD_DUMMY,
	CMD_CLEAR,			// Очистить весь экран. Никаких аргументов.
	CMD_SET_POS,		// Установить курсор в позицию. 1 байт аргумент.
	CMD_LEFT,
	CMD_RIGHT,
	CMD_CUR_HOME,		// Курсор в домашнюю позицию
	CMD_CUR_STATE,		// Отображение курсора. Аргумент один байт.
	CMD_INC_ON,			// Автоувеличение адреса включено. Никаких аргументов.
	CMD_INC_OFF,		// * 		*		*	выключено. Никаких аргументов.
	CMD_DIS_ON,			//
	CMD_DIS_OFF,		//
	CMD_DIS_RESET		//
} LCD_CMD;

#define LCD_OK						0
#define LCD_QUEUE_ERR			1
#define LCD_DATATYPE_ERR	2
#define LCD_ERR_POSITION		4


void vStartLCD( unsigned portBASE_TYPE uxPriority );

/**
 * Вывод текста в позицию position в строке line. Проверка на выход за границы строки.
 */
portBASE_TYPE xLCDDrawText( const char *text, LCD_Line line, uint8_t position );
portBASE_TYPE xLCDDrawTextFromISR( const char *text, LCD_Line line, uint8_t position );
portBASE_TYPE xLCDDrawSimple( const char *text );

/**
 * Очищение текста (печать пробелов).
 */
portBASE_TYPE xLCDClearText( LCD_Line line, uint8_t position, uint8_t lenght );
portBASE_TYPE xLCDClearTextFromISR( LCD_Line line, uint8_t position, uint8_t lenght );

/**
 * Отправка комманды дисплею
 */
portBASE_TYPE xLCDSendCmd( LCD_DataType cmd, uint8_t argv );
#endif /* TSK_LCD_H_ */
